Inter-Task Communication


#include "mpi.h"
#include <stdio.h>
#include <string.h>

main(int argc, char *argv[])  {
    int numtasks, rank, dest, source, rc, count;  
    char inmsg[30], outmsg0[]="Hello Task 1",outmsg1[]="You are Welcome Task 0";

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    if (rank == 0) {      // task 0 sends to task 1 and waits to receive a return message
        dest = 1;
        source = 1;
        MPI_Send(&outmsg0,strlen(outmsg0), MPI_CHAR, dest, 0, MPI_COMM_WORLD);
        printf("\nTask 0 has sent its  message to Task 1. \n");
        MPI_Recv(&inmsg, 30, MPI_CHAR, source, 1, MPI_COMM_WORLD,  MPI_STATUS_IGNORE);
        printf("Task 0 received this  message from Task 1:   %s\n\n", inmsg);
    }
    else if (rank == 1) {   // task 1 waits for task 0 message then returns a message
        dest = 0;
        source = 0;
        MPI_Recv(&inmsg,30, MPI_CHAR, source, 0, MPI_COMM_WORLD,  MPI_STATUS_IGNORE);
        printf("Task 1 received this  message:   %s\n", inmsg);
        printf("Task 1 has not sent its  message to Task 0 yet.\n\n");
        MPI_Send(&outmsg1,strlen(outmsg1), MPI_CHAR, dest, 1, MPI_COMM_WORLD);    
    }
    MPI_Finalize();
}


The Output, Why?